import io
import os

import markdown
import pdfkit
from src.minio.minio_client import upload_file_to_minio

# 示例 Markdown 内容
markdown_pre1 = """
## **李磊 89分**
#### **年龄：20 性别：男 手机号：1828179392 学历：本科 工作年限：3年**

"""
markdown_text1 = """
### 匹配评估报告

**评估模型：The Specialist/Engineer**
- **选用理由**: 该职位强调深厚的技术功底和分布式、高并发系统的工程能力，李磊的简历中显示了丰富的相关技术经验和实战案例，符合技术专家型人才画像。
- **权重分配**: 核心资格匹配度 (50%), 经验相关性与质量 (30%), 过往成就与影响力 (10%), 优先资格匹配度 (10%)

---

**分数明细 (满分10)**
- **核心资格匹配度**: 9
- **经验相关性与质量**: 8
- **过往成就与影响力**: 9
- **优先资格匹配度**: 7

---

**核心优势分析**
1.  **扎实的编程语言和技术栈能力**
    - **证据**: "具备5年以上一线互联网公司软件开发经验，熟悉Java（熟练）、Go（熟练）"
2.  **丰富的微服务与分布式系统经验**
    - **证据**: "后端框架：Spring Boot / Spring Cloud、gRPC、Dubbo"；"服务拆分、数据治理与灰度发布策略落地"
3.  **高并发与高可用系统设计的实践**
    - **证据**: "负责美团到店业务中多个核心服务系统的开发与维护，日均请求量超千万"；"高并发交易系统优化项目"
4.  **显著的性能优化和系统稳定性提升**
    - **证据**: "P99延迟降低40%"；"接口QPS提升2倍"；"数据库压力下降30%"

---

**潜在风险与差距**
1.  **缺少明确电商主站核心模块经验**
    - **证据**: "简历中虽有高并发交易系统经验，但未直接体现电商核心模块如订单引擎、交易撮合等涉及"
2.  **大型促销活动系统支持经验体现不足**
    - **证据**: "无明确提及618、双11等大型促销活动系统相关经验"

---

**建议面试问题**
- "请详细介绍您在美团高并发交易系统优化项目中，如何实施微服务架构改造，以及面临的最大技术挑战？"
- "您如何设计和优化高并发环境下的Redis缓存和数据库架构？能分享具体的性能提升方案吗？"
- "面对巨大流量波动的促销活动，您有哪些技术策略保障系统稳定和高可用？"
    """



def gen_pdf_upload(markdown_pre: str, markdown_text: str, file_name: str) -> str:
    '''根据markdown生成pdf文件'''
    extensions = [
        "fenced_code",  # 支持```代码块```
        "codehilite",  # 代码高亮，需要Pygments支持
        "tables",  # 支持表格
        "toc",  # 目录
        "nl2br",  # 换行自动转<br>
        "sane_lists",  # 更加智能的列表识别
        "smarty",  # 智能引号等符号替换
        "attr_list",  # 支持给元素添加属性
        "footnotes",  # 脚注
        "def_list",  # 定义列表
        "md_in_html",  # 支持HTML中的Markdown
        "admonition",  # 警告块
        "legacy_attrs",  # 老属性格式支持
        "legacy_em",  # 老的强调支持
    ]
    html_content = markdown.markdown(markdown_pre + markdown_text, extensions=extensions)

    style = """
        <style>
            body {
                font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen,
                             Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
                line-height: 1.6;
                padding: 20px;
                color: #333;
                background: #fff;
            }
            h1, h2, h3, h4, h5, h6 {
                font-weight: 600;
                margin-top: 1.5em;
                margin-bottom: 0.5em;
                color: #222;
            }
            p {
                margin-bottom: 1em;
            }
            a {
                color: #0366d6;
                text-decoration: none;
            }
            a:hover {
                text-decoration: underline;
            }
            blockquote {
                color: #6a737d;
                border-left: 0.25em solid #dfe2e5;
                padding-left: 1em;
                margin-left: 0;
                margin-right: 0;
                font-style: italic;
                background-color: #f6f8fa;
            }
            code {
                background-color: #f6f8fa;
                border-radius: 3px;
                font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
                font-size: 85%;
                padding: 0.2em 0.4em;
            }
            pre {
                background-color: #f6f8fa;
                padding: 1em;
                overflow: auto;
                border-radius: 6px;
                font-size: 0.9em;
                line-height: 1.45;
                margin-bottom: 1em;
            }
            table {
                border-collapse: collapse;
                width: 100%;
                margin-bottom: 1em;
            }
            th, td {
                border: 1px solid #dfe2e5;
                padding: 6px 13px;
                text-align: left;
            }
            th {
                background-color: #f6f8fa;
                font-weight: 600;
            }
            ul, ol {
                padding-left: 2em;
                margin-bottom: 1em;
            }
            hr {
                border: none;
                border-top: 1px solid #dfe2e5;
                margin: 2em 0;
            }
            .footnote-ref {
                font-size: 0.85em;
                vertical-align: super;
            }
            .admonition {
                border-left: 4px solid #dfe2e5;
                background-color: #f6f8fa;
                padding: 0.5em 1em;
                margin-bottom: 1em;
            }
        </style>
        """

    full_html = f"""
        <!DOCTYPE html>
        <html lang="zh-CN">
        <head>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <title>Markdown Render</title>
            {style}
        </head>
        <body>
        {html_content}
        </body>
        </html>
        """

    pdfkit.from_string(full_html, file_name)
    file_url = None
    with open(file_name, 'rb') as f:
        pdf_bytes = f.read()
        file_object = io.BytesIO(pdf_bytes)
        file_url = upload_file_to_minio(file_object, file_name, "application/pdf")

    os.remove(file_name)
    return  file_url

if __name__ == '__main__':
    file_path = gen_pdf_upload(markdown_pre1,markdown_text1, 'output.pdf')
    print(f'文件地址：{file_path}')

#todo 下载工具 https://github.com/wkhtmltopdf/packaging/releases/0.12.6-1